//抽象类用abstract修饰 抽象方法就是没有方法体的方法
//抽象类中可以定义抽象方法和普通方法
//抽象类不能实例化 只有继承抽象类的子类才能实例化
//子类必须实现抽象类的方法

//抽象类
abstract class Animal {
  eat(); //抽象方法
  drink();

  run() {
    print("run");
  }
}

class Dog extends Animal {
  //重写抽象类的抽象方法
  @override
  eat() {
    print("dog正在吃肉");
  }

  @override
  drink() {
    print("dog正在喝水");
  }

  @override
  run() {
    print("dog is running");
  }
}

void main() {
  Dog d = new Dog();
  d.eat();
  d.drink();
  d.run();

  Animal a = new Dog();
  a.run();
}
